// 缺点1：无法取消
// 解决方案：使用 AbortController
const controller = new AbortController();
const signal = controller.signal;

fetch('/api', { signal })
    .then(response => response.json())
    .catch(error => {
        if (error.name === 'AbortError') {
            console.log('请求被取消');
        }
    });

// 取消请求
controller.abort();

// 缺点2：无法获取进度
// 解决方案：自定义进度 Promise
function progressPromise(task, onProgress) {
    return new Promise((resolve, reject) => {
        task(
            (progress) => onProgress(progress),
            (result) => resolve(result),
            (error) => reject(error)
        );
    });
}